/*
 * FreeRTOS+TCP V2.3.2 LTS Patch 2
 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of
 * this software and associated documentation files (the "Software"), to deal in
 * the Software without restriction, including without limitation the rights to
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 * the Software, and to permit persons to whom the Software is furnished to do so,
 * subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * http://www.FreeRTOS.org
 * http://aws.amazon.com/freertos
 *
 * 1 tab == 4 spaces!
 */

#ifndef FREERTOS_DEFAULT_IP_CONFIG_H
#define FREERTOS_DEFAULT_IP_CONFIG_H

/* The error numbers defined in this file will be moved to the core FreeRTOS
 * code in future versions of FreeRTOS - at which time the following header file
 * will be removed. */
#include "FreeRTOS_errno_TCP.h"

/* This file provides default values for configuration options that are missing
 * from the FreeRTOSIPConfig.h configuration header file. */

/* These macros are used to define away static keyword for CBMC proofs */
#ifndef _static
    #define _static    static
#endif

/* Ensure defined configuration constants are using the most up to date naming. */
#ifdef tcpconfigIP_TIME_TO_LIVE
    #error now called: ipconfigTCP_TIME_TO_LIVE
#endif

#ifdef updconfigIP_TIME_TO_LIVE
    #error now called: ipconfigUDP_TIME_TO_LIVE
#endif

#ifdef ipFILLER_SIZE
    #error now called: ipconfigPACKET_FILLER_SIZE
#endif

#ifdef dnsMAX_REQUEST_ATTEMPTS
    #error now called: ipconfigDNS_REQUEST_ATTEMPTS
#endif

#ifdef ipconfigUDP_TASK_PRIORITY
    #error now called: ipconfigIP_TASK_PRIORITY
#endif

#ifdef ipconfigUDP_TASK_STACK_SIZE_WORDS
    #error now called: ipconfigIP_TASK_STACK_SIZE_WORDS
#endif

#ifdef ipconfigDRIVER_INCLUDED_RX_IP_FILTERING
    #error now called: ipconfigETHERNET_DRIVER_FILTERS_PACKETS
#endif

#ifdef ipconfigMAX_SEND_BLOCK_TIME_TICKS
    #error now called: ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS
#endif

#ifdef ipconfigUSE_RECEIVE_CONNECT_CALLBACKS
    #error now called: ipconfigUSE_CALLBACKS
#endif

#ifdef ipconfigNUM_NETWORK_BUFFERS
    #error now called: ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS
#endif

#ifdef ipconfigTCP_HANG_PROT
    #error now called: ipconfigTCP_HANG_PROTECTION
#endif

#ifdef ipconfigTCP_HANG_PROT_TIME
    #error now called: ipconfigTCP_HANG_PROTECTION_TIME
#endif

#ifdef FreeRTOS_lprintf
    #error now called: FreeRTOS_debug_printf
#endif

#if ( ipconfigEVENT_QUEUE_LENGTH < ( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS + 5 ) )
    #error The ipconfigEVENT_QUEUE_LENGTH parameter must be at least ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS + 5
#endif

#if ( ipconfigNETWORK_MTU < 46 )
    #error ipconfigNETWORK_MTU must be at least 46.
#endif

#ifdef  ipconfigBUFFER_ALLOC_FIXED_SIZE
    #error ipconfigBUFFER_ALLOC_FIXED_SIZE was dropped and replaced by a const value, declared in BufferAllocation[12].c
#endif

#ifdef  ipconfigNIC_SEND_PASSES_DMA
    #error now called: ipconfigZERO_COPY_TX_DRIVER
#endif

#ifdef  HAS_TX_CRC_OFFLOADING

/* _HT_ As these macro names have changed, throw an error
 * if they're still defined. */
    #error now called: ipconfigHAS_TX_CRC_OFFLOADING
#endif

#ifdef  HAS_RX_CRC_OFFLOADING
    #error now called: ipconfigHAS_RX_CRC_OFFLOADING
#endif

#ifdef ipconfigTCP_RX_BUF_LEN
    #error ipconfigTCP_RX_BUF_LEN is now called ipconfigTCP_RX_BUFFER_LENGTH
#endif

#ifdef ipconfigTCP_TX_BUF_LEN
    #error ipconfigTCP_TX_BUF_LEN is now called ipconfigTCP_TX_BUFFER_LENGTH
#endif

#ifdef ipconfigDHCP_USES_USER_HOOK
    #error ipconfigDHCP_USES_USER_HOOK and its associated callback have been superseded - see http: /*www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_IP_Configuration.html#ipconfigUSE_DHCP_HOOK */
#endif

#ifndef ipconfigUSE_TCP
    #define ipconfigUSE_TCP    ( 1 )
#endif

#if ipconfigUSE_TCP

/* Include support for TCP scaling windows */
    #ifndef ipconfigUSE_TCP_WIN
        #define ipconfigUSE_TCP_WIN    ( 1 )
    #endif

    #ifndef ipconfigTCP_WIN_SEG_COUNT
        #define ipconfigTCP_WIN_SEG_COUNT    ( 256 )
    #endif

    #ifndef ipconfigIGNORE_UNKNOWN_PACKETS

/* When non-zero, TCP will not send RST packets in reply to
 * TCP packets which are unknown, or out-of-order. */
        #define ipconfigIGNORE_UNKNOWN_PACKETS    ( 0 )
    #endif
#endif /* if ipconfigUSE_TCP */

/*
 * For debugging/logging: check if the port number is used for telnet
 * Some events will not be logged for telnet connections
 * because it would produce logging about the transmission of the logging...
 * This macro will only be used if FreeRTOS_debug_printf() is defined for logging
 */
#ifndef ipconfigTCP_MAY_LOG_PORT
    #define ipconfigTCP_MAY_LOG_PORT( xPort )    ( ( xPort ) != 23U )
#endif


#ifndef ipconfigSOCK_DEFAULT_RECEIVE_BLOCK_TIME
    #define ipconfigSOCK_DEFAULT_RECEIVE_BLOCK_TIME    portMAX_DELAY
#endif

#ifndef ipconfigSOCK_DEFAULT_SEND_BLOCK_TIME
    #define ipconfigSOCK_DEFAULT_SEND_BLOCK_TIME    portMAX_DELAY
#endif


#ifndef ipconfigDNS_RECEIVE_BLOCK_TIME_TICKS
    #define ipconfigDNS_RECEIVE_BLOCK_TIME_TICKS    pdMS_TO_TICKS( 5000U )
#endif

#ifndef ipconfigDNS_SEND_BLOCK_TIME_TICKS
    #define ipconfigDNS_SEND_BLOCK_TIME_TICKS    pdMS_TO_TICKS( 500U )
#endif

/*
 * FreeRTOS debug logging routine (proposal)
 * The macro will be called in the printf() style. Users can define
 * their own logging routine as:
 *
 *     #define FreeRTOS_debug_printf( MSG )         my_printf MSG
 *
 * The FreeRTOS_debug_printf() must be thread-safe but does not have to be
 * interrupt-safe.
 */
#ifdef ipconfigHAS_DEBUG_PRINTF
    #if ( ipconfigHAS_DEBUG_PRINTF == 0 )
        #ifdef FreeRTOS_debug_printf
            #error Do not define FreeRTOS_debug_print if ipconfigHAS_DEBUG_PRINTF is set to 0
        #endif /* ifdef FreeRTOS_debug_printf */
    #endif /* ( ipconfigHAS_DEBUG_PRINTF == 0 ) */
#endif /* ifdef ipconfigHAS_DEBUG_PRINTF */

#ifndef FreeRTOS_debug_printf
    #define FreeRTOS_debug_printf( MSG )    do {} while( ipFALSE_BOOL )
    #define ipconfigHAS_DEBUG_PRINTF    0
#endif

/*
 * FreeRTOS general logging routine (proposal)
 * Used in some utility functions such as FreeRTOS_netstat() and FreeRTOS_PrintARPCache()
 *
 *     #define FreeRTOS_printf( MSG )           my_printf MSG
 *
 * The FreeRTOS_printf() must be thread-safe but does not have to be interrupt-safe
 */
#ifdef ipconfigHAS_PRINTF
    #if ( ipconfigHAS_PRINTF == 0 )
        #ifdef FreeRTOS_printf
            #error Do not define FreeRTOS_print if ipconfigHAS_PRINTF is set to 0
        #endif /* ifdef FreeRTOS_debug_printf */
    #endif /* ( ipconfigHAS_PRINTF == 0 ) */
#endif /* ifdef ipconfigHAS_PRINTF */

#ifndef FreeRTOS_printf
    #define FreeRTOS_printf( MSG )    do {} while( ipFALSE_BOOL )
    #define ipconfigHAS_PRINTF    0
#endif

/*
 * In cases where a lot of logging is produced, FreeRTOS_flush_logging( )
 * will be called to give the logging module a chance to flush the data
 * An example of this is the netstat command, which produces many lines of logging
 */
#ifndef FreeRTOS_flush_logging
    #define FreeRTOS_flush_logging()    do {} while( ipFALSE_BOOL )
#endif

/* Malloc functions. Within most applications of FreeRTOS, the couple
 * pvPortMalloc()/vPortFree() will be used.
 * If there is also SDRAM, the user may decide to use a different memory
 * allocator:
 * MallocLarge is used to allocate large TCP buffers (for Rx/Tx)
 * MallocSocket is used to allocate the space for the sockets
 */
#ifndef pvPortMallocLarge
    #define pvPortMallocLarge( x )    pvPortMalloc( x )
#endif

#ifndef vPortFreeLarge
    #define vPortFreeLarge( ptr )    vPortFree( ptr )
#endif

#ifndef pvPortMallocSocket
    #define pvPortMallocSocket( x )    pvPortMalloc( x )
#endif

#ifndef vPortFreeSocket
    #define vPortFreeSocket( ptr )    vPortFree( ptr )
#endif

/*
 * At several places within the library, random numbers are needed:
 * - DHCP:    For creating a DHCP transaction number
 * - TCP:     Set the Initial Sequence Number: this is the value of the first outgoing
 *            sequence number being used when connecting to a peer.
 *            Having a well randomized ISN is important to avoid spoofing
 * - UDP/TCP: for setting the first port number to be used, in case a socket
 *            uses a 'random' or anonymous port number
 */
#ifndef ipconfigRAND32
    #define ipconfigRAND32()    rand()
#endif

/* --------------------------------------------------------
 * End of: HT Added some macro defaults for the PLUS-UDP project
 * -------------------------------------------------------- */

#ifndef ipconfigUSE_NETWORK_EVENT_HOOK
    #define ipconfigUSE_NETWORK_EVENT_HOOK    0
#endif

#ifndef ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS
    #define ipconfigUDP_MAX_SEND_BLOCK_TIME_TICKS    ( pdMS_TO_TICKS( 20U ) )
#endif

#ifndef ipconfigARP_CACHE_ENTRIES
    #define ipconfigARP_CACHE_ENTRIES    10
#endif

#ifndef ipconfigMAX_ARP_RETRANSMISSIONS
    #define ipconfigMAX_ARP_RETRANSMISSIONS    ( 5U )
#endif

#ifndef ipconfigMAX_ARP_AGE
    #define ipconfigMAX_ARP_AGE    150U
#endif

#ifndef ipconfigUSE_ARP_REVERSED_LOOKUP
    #define ipconfigUSE_ARP_REVERSED_LOOKUP    0
#endif

#ifndef ipconfigUSE_ARP_REMOVE_ENTRY
    #define ipconfigUSE_ARP_REMOVE_ENTRY    0
#endif

#ifndef ipconfigINCLUDE_FULL_INET_ADDR
    #define ipconfigINCLUDE_FULL_INET_ADDR    1
#endif

#ifndef ipconfigUSE_LINKED_RX_MESSAGES
    #define ipconfigUSE_LINKED_RX_MESSAGES    0
#endif

#ifndef ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS
    #define ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS    45
#endif

#ifndef ipconfigEVENT_QUEUE_LENGTH
    #define ipconfigEVENT_QUEUE_LENGTH    ( ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS + 5 )
#endif

#ifndef ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND
    #define ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND    1
#endif

/* Configuration to control whether packets with IP options,
 * received over the network, should be passed up to the
 * software stack OR should be dropped.
 * If set to 1, the stack accepts IP packets that contain IP options, but does
 * not process the options (IP options are not supported).
 * If set to 0, the stack will drop IP packets that contain IP options.
 */
#ifndef ipconfigIP_PASS_PACKETS_WITH_IP_OPTIONS
    #define ipconfigIP_PASS_PACKETS_WITH_IP_OPTIONS    1
#endif

/* Configuration to control whether UDP packets with
 * checksum value of zero should be passed up the software
 * stack OR should be dropped.
 * If set to 1, the stack will accept UDP packets that have their checksum
 * value set to 0.
 * If set to 0, the stack will drop UDP packets that have their checksum value
 * set to 0.
 */
#ifndef ipconfigUDP_PASS_ZERO_CHECKSUM_PACKETS
    #define ipconfigUDP_PASS_ZERO_CHECKSUM_PACKETS    0
#endif

#ifndef ipconfigUDP_TIME_TO_LIVE
    #define ipconfigUDP_TIME_TO_LIVE    128
#endif

#ifndef ipconfigTCP_TIME_TO_LIVE
    #define ipconfigTCP_TIME_TO_LIVE    128
#endif

#ifndef ipconfigUDP_MAX_RX_PACKETS

/* Make positive to define the maximum number of packets which will be buffered
 * for each UDP socket.
 * Can be overridden with the socket option FREERTOS_SO_UDP_MAX_RX_PACKETS
 */
    #define ipconfigUDP_MAX_RX_PACKETS    0U
#endif

#ifndef ipconfigUSE_DHCP
    #define ipconfigUSE_DHCP    1
#endif

#ifndef ipconfigUSE_DHCP_HOOK
    #define ipconfigUSE_DHCP_HOOK    0
#endif

#ifndef ipconfigDHCP_FALL_BACK_AUTO_IP

/*
 * Only applicable when DHCP is in use:
 * If no DHCP server responds, use "Auto-IP" : the
 * device will allocate a random LinkLayer IP address.
 */
    #define ipconfigDHCP_FALL_BACK_AUTO_IP    ( 0 )
#endif

#if ( ipconfigDHCP_FALL_BACK_AUTO_IP != 0 )
    #define ipconfigARP_USE_CLASH_DETECTION    1
#endif

#ifndef ipconfigARP_USE_CLASH_DETECTION
    #define ipconfigARP_USE_CLASH_DETECTION    0
#endif

#ifndef ipconfigNETWORK_MTU
    #define ipconfigNETWORK_MTU    1500
#else
    #if ipconfigNETWORK_MTU > ( SIZE_MAX >> 1 )
        #undef ipconfigNETWORK_MTU
        #define ipconfigNETWORK_MTU    ( SIZE_MAX >> 1 )
    #endif
#endif

#ifndef ipconfigTCP_MSS
    #define ipconfigTCP_MSS    ( ipconfigNETWORK_MTU - ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER ) )
#endif

/* Each TCP socket has circular stream buffers for Rx and Tx, which
 * have a fixed maximum size.
 * The defaults for these size are defined here, although
 * they can be overridden at runtime by using the setsockopt() call */
#ifndef ipconfigTCP_RX_BUFFER_LENGTH
    #define ipconfigTCP_RX_BUFFER_LENGTH    ( 4U * ipconfigTCP_MSS )            /* defaults to 5840 bytes */
#endif

/* Define the size of Tx stream buffer for TCP sockets */
#ifndef ipconfigTCP_TX_BUFFER_LENGTH
    #define ipconfigTCP_TX_BUFFER_LENGTH    ( 4U * ipconfigTCP_MSS )        /* defaults to 5840 bytes */
#endif

#ifndef ipconfigMAXIMUM_DISCOVER_TX_PERIOD
    #ifdef _WINDOWS_
        #define ipconfigMAXIMUM_DISCOVER_TX_PERIOD    ( pdMS_TO_TICKS( 999U ) )
    #else
        #define ipconfigMAXIMUM_DISCOVER_TX_PERIOD    ( pdMS_TO_TICKS( 30000U ) )
    #endif /* _WINDOWS_ */
#endif /* ipconfigMAXIMUM_DISCOVER_TX_PERIOD */

#if ( ipconfigUSE_DNS == 0 )
    /* The DNS module will not be included. */
    #if ( ( ipconfigUSE_LLMNR != 0 ) || ( ipconfigUSE_NBNS != 0 ) )
        /* LLMNR and NBNS depend on DNS because those protocols share a lot of code. */
        #error When either LLMNR or NBNS is used, ipconfigUSE_DNS must be defined
    #endif
#endif

#ifndef ipconfigUSE_DNS
    #define ipconfigUSE_DNS    1
#endif

#ifndef ipconfigDNS_REQUEST_ATTEMPTS
    #define ipconfigDNS_REQUEST_ATTEMPTS    5
#endif

#ifndef ipconfigUSE_DNS_CACHE
    #define ipconfigUSE_DNS_CACHE    0
#endif

#if ( ipconfigUSE_DNS_CACHE != 0 )
    #ifndef ipconfigDNS_CACHE_NAME_LENGTH

/* Per https://tools.ietf.org/html/rfc1035, 253 is the maximum string length
 * of a DNS name. The following default accounts for a null terminator. */
        #define ipconfigDNS_CACHE_NAME_LENGTH    254U
    #endif

    #ifndef ipconfigDNS_CACHE_ENTRIES
        #define ipconfigDNS_CACHE_ENTRIES    1
    #endif

#endif /* ipconfigUSE_DNS_CACHE != 0 */

/* When accessing services which have multiple IP addresses, setting this
 * greater than 1 can improve reliability by returning different IP address
 * answers on successive calls to FreeRTOS_gethostbyname(). */
#ifndef ipconfigDNS_CACHE_ADDRESSES_PER_ENTRY
    #define ipconfigDNS_CACHE_ADDRESSES_PER_ENTRY    1
#endif

#ifndef ipconfigCHECK_IP_QUEUE_SPACE
    #define ipconfigCHECK_IP_QUEUE_SPACE    0
#endif

#ifndef ipconfigUSE_LLMNR
    /* Include support for LLMNR: Link-local Multicast Name Resolution (non-Microsoft) */
    #define ipconfigUSE_LLMNR    ( 0 )
#endif

#ifndef ipconfigREPLY_TO_INCOMING_PINGS
    #define ipconfigREPLY_TO_INCOMING_PINGS    1
#endif

#ifndef ipconfigSUPPORT_OUTGOING_PINGS
    #define ipconfigSUPPORT_OUTGOING_PINGS    0
#endif

#ifndef ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES
    #define ipconfigFILTER_OUT_NON_ETHERNET_II_FRAMES    1
#endif

#ifndef ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES
    #define ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES    1
#endif

#ifndef configINCLUDE_TRACE_RELATED_CLI_COMMANDS
    #define ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS    0
#else
    #define ipconfigINCLUDE_EXAMPLE_FREERTOS_PLUS_TRACE_CALLS    configINCLUDE_TRACE_RELATED_CLI_COMMANDS
#endif

#ifndef ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM
    #define ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM    ( 0 )
#endif

#ifndef ipconfigETHERNET_DRIVER_FILTERS_PACKETS
    #define ipconfigETHERNET_DRIVER_FILTERS_PACKETS    ( 0 )
#endif

#ifndef ipconfigWATCHDOG_TIMER

/* This macro will be called in every loop the IP-task makes.  It may be
 * replaced by user-code that triggers a watchdog */
    #define ipconfigWATCHDOG_TIMER()
#endif

#ifndef ipconfigUSE_CALLBACKS
    #define ipconfigUSE_CALLBACKS    ( 0 )
#endif

#if ( ipconfigUSE_CALLBACKS != 0 )
    #ifndef ipconfigIS_VALID_PROG_ADDRESS

/* Replace this macro with a test returning non-zero if the memory pointer to by x
 * is valid memory which can contain executable code
 * In fact this is an extra safety measure: if a handler points to invalid memory,
 * it will not be called
 */
        #define ipconfigIS_VALID_PROG_ADDRESS( x )    ( ( x ) != NULL )
    #endif
#endif

#ifndef ipconfigHAS_INLINE_FUNCTIONS
    #define ipconfigHAS_INLINE_FUNCTIONS    ( 1 )
#endif

#ifndef portINLINE
    #define portINLINE    inline
#endif

#ifndef ipconfigZERO_COPY_TX_DRIVER

/* When non-zero, the buffers passed to the SEND routine may be passed
 * to DMA. As soon as sending is ready, the buffers must be released by
 * calling vReleaseNetworkBufferAndDescriptor(), */
    #define ipconfigZERO_COPY_TX_DRIVER    ( 0 )
#endif

#ifndef ipconfigZERO_COPY_RX_DRIVER

/* This define doesn't mean much to the driver, except that it makes
 * sure that pxPacketBuffer_to_NetworkBuffer() will be included. */
    #define ipconfigZERO_COPY_RX_DRIVER    ( 0 )
#endif

#ifndef ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM
    #define ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM    0
#endif

#ifndef ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM
    #define ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM    0
#endif

#ifndef ipconfigDHCP_REGISTER_HOSTNAME
    #define ipconfigDHCP_REGISTER_HOSTNAME    0
#endif

#ifndef ipconfigSOCKET_HAS_USER_SEMAPHORE
    #define ipconfigSOCKET_HAS_USER_SEMAPHORE    0
#endif

#ifndef ipconfigSOCKET_HAS_USER_WAKE_CALLBACK
    #define ipconfigSOCKET_HAS_USER_WAKE_CALLBACK    0
#endif

#ifndef ipconfigSUPPORT_SELECT_FUNCTION
    #define ipconfigSUPPORT_SELECT_FUNCTION    0
#endif

#ifndef ipconfigTCP_KEEP_ALIVE
    #define ipconfigTCP_KEEP_ALIVE    0
#endif

#ifndef ipconfigDNS_USE_CALLBACKS
    #define ipconfigDNS_USE_CALLBACKS    0
#endif

#ifndef ipconfigSUPPORT_SIGNALS
    #define ipconfigSUPPORT_SIGNALS    0
#endif

#ifndef ipconfigUSE_NBNS
    #define ipconfigUSE_NBNS    0
#endif

/* As an attack surface reduction for ports that listen for inbound
 * connections, hang protection can help reduce the impact of SYN floods. */
#ifndef ipconfigTCP_HANG_PROTECTION
    #define ipconfigTCP_HANG_PROTECTION    1
#endif

/* Non-activity timeout is expressed in seconds. */
#ifndef ipconfigTCP_HANG_PROTECTION_TIME
    #define ipconfigTCP_HANG_PROTECTION_TIME    30U
#endif

#ifndef ipconfigTCP_IP_SANITY
    #define ipconfigTCP_IP_SANITY    0
#endif

#ifndef ipconfigARP_STORES_REMOTE_ADDRESSES
    #define ipconfigARP_STORES_REMOTE_ADDRESSES    0
#endif

#ifndef ipconfigBUFFER_PADDING

/* Expert option: define a value for 'ipBUFFER_PADDING'.
 * When 'ipconfigBUFFER_PADDING' equals 0,
 * 'ipBUFFER_PADDING' will get a default value of 8 + 2 bytes. */
    #define ipconfigBUFFER_PADDING    0U
#endif

#ifndef ipconfigPACKET_FILLER_SIZE
    #define ipconfigPACKET_FILLER_SIZE    2U
#endif

#ifndef ipconfigSELECT_USES_NOTIFY
    #define ipconfigSELECT_USES_NOTIFY    0
#endif

#endif /* FREERTOS_DEFAULT_IP_CONFIG_H */
